/*
 *                        .::::.
 *                      .::::::::.
 *                     :::::::::::
 *                  ..:::::::::::'
 *               '::::::::::::'
 *                 .::::::::::
 *            '::::::::::::::..
 *                 ..::::::::::::.
 *               ``::::::::::::::::
 *                ::::``:::::::::'        .:::.
 *               ::::'   ':::::'       .::::::::.
 *             .::::'      ::::     .:::::::'::::.
 *            .:::'       :::::  .:::::::::' ':::::.
 *           .::'        :::::.:::::::::'      ':::::.
 *          .::'         ::::::::::::::'         ``::::.
 *      ...:::           ::::::::::::'              ``::.
 *     ````':.          ':::::::::'                  ::::..
 *                        '.:::::'                    ':'````..
 *
 * @Author: byx
 * @Date: 2022-08-06 13:10:55
 * @LastEditors: byx
 * @LastEditTime: 2022-09-03 10:07:15
 * @version: 1.0
 * @Descripttion: wwww.byx1024.top
 */

// 首页分类模块
import { topCategory } from '@/api/constants'
import { findAllCategory } from '@/api/category'

export default {
  namespaced: true,
  state: () => {
    return {
      // 如果默认是[]数组，看不见默认的9个分类，等你数据加载完毕才会看到。
      // 所以：根据常量数据来生成一个默认的顶级分类数据，不会出现空白（没数据的情况）
      list: topCategory.map((item) => ({ name: item }))
    }
  },
  // 加载数据成功后需要修改list所以需要mutations函数
  mutations: {
    // 形参 headCategory 所有的分类合集
    setCategoryList(state, headCategory) {
      state.list = headCategory
    },
    // 定义show 和 hide函数，控制当前分类的二级分类显示和隐藏
    // 修改当前一级分类下的open数据为true
    show(state, item) {
      const category = state.list.find((category) => category.id === item.id)
      category.open = true
    },
    // 修改当前一级分类下的open数据为false
    hide(state, item) {
      const category = state.list.find((category) => category.id === item.id)
      category.open = false
    }
  },
  // 需要向后台加载数据，所以需要actions函数获取数据
  actions: {
    async getCategoryList({ commit }) {
      // 获取分类数据
      const { result } = await findAllCategory()

      // 给一级分类加上一个控制二级分类显示隐藏的数据（属性）open
      result.forEach((item) => {
        item.open = false
      })
      // 获取数据成功，提交mutations进行数据修改
      commit('setCategoryList', result)
    }
  }
}
